Problem
排队
Description
排排坐,吃果果,生果甜嗦嗦,大家笑呵呵。你一个,我一个,大的分给你,小的留给我,吃完果果唱支歌,大家乐和和。
红星幼儿园的小朋友们排起了长长地队伍,准备吃果果。不过因为小朋友们的身高有所区别,排成的队伍高低错乱,极不美观。
设第个小朋友的身高为,我们定义一个序列的杂乱程度为满足且的数量。
幼儿园阿姨每次会选出两个小朋友,交换他们的位置,请你帮忙计算出每次交换后,序列的杂乱程度。
为方便幼儿园阿姨统计,在未进行任何交换操作时,你也应该输出该序列的杂乱程度。
Input
第一行为一个正整数,表示小朋友的数量。
第二行包含个由空格分隔的正整数,依次表示初始队列中小朋友的身高。
第三行为一个正整数,表示交换操作的次数。
以下行每行包含两个正整数和,表示交换位置与位置的小朋友。
Output
输出文件共行,第行一个正整数表示交换操作结束后,序列的杂乱程度。
Sample Input
1 | 3 |
Sample Output
1 | 1 |
Hint
样例说明
未进行任何操作时,满足条件;
操作结束后,序列为,不存在满足条件的;
操作结束后,序列为,有,,共对满足条件的
数据规模
,,,,。
标签:分块
树状数组
Solution
分块基础应用之带交换逆序对。
将原序列分为个大小为的块,每块内维护一个值域树状数组,记录每个值的个数。
一开始增量计算总逆序对对数,随后对每个操作计算会增加/减少多少对逆序对。
当交换时,对于,
- 若,则
- 若,则
- 若,则
- 若,则
整块直接用树状数组统计,剩余部分暴力即可。
Code
1 |
|